package com.kun.rental.vo;

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;


/**
 * 路由信息类，用于表示系统的路由配置。
 * 包含路由的路径、组件、名称、重定向信息，以及是否始终显示的标志。
 * 还包括路由的元信息和子路由的列表。
 */
@Data
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class RouteVo {
    /**
     * 路由的路径，用于URL定位。
     */
    private String path;
    /**
     * 路由对应的组件名称，通常是一个Vue组件的名称。
     */
    private String component;
    /**
     * 路由的名称，用于导航和标签页的显示。
     */
    private String name;

    /**
     * 是否始终显示该路由，即使其子路由未满足权限要求。
     */
    private Boolean alwaysShow;
    /**
     * 路由的元信息，包含标题、图标和角色等信息。
     */
    private Meta meta;
    /**
     * 该路由的子路由列表，用于构建多级路由结构。
     */
    private List<RouteVo> children;

    /**
     * 元信息类，包含路由的标题、图标和角色等信息。
     * 用于对路由进行装饰和权限控制。
     */
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class Meta{
        /**
         * 路由的标题，通常用于导航栏或标签页的显示。
         */
        private String title;
        /**
         * 路由的图标，通常是一个Font Awesome图标名，用于美化导航栏或标签页。
         */
        private String icon;
        /**
         * 路由的角色限制，用于权限控制，只有拥有指定角色的用户才能访问该路由。
         */
        private Object[] roles;
    }
}

